package com.atguigu.gulionline.service.edu.controller.admin;


import com.atguigu.gulionline.service.base.result.R;
import com.atguigu.gulionline.service.edu.entity.Teacher;
import com.atguigu.gulionline.service.edu.entity.query.TeacherQuery;
import com.atguigu.gulionline.service.edu.service.TeacherService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 讲师 前端控制器
 * </p>
 *
 * @author ysc
 * @since 2021-01-23
 */
@RestController //Controller+ResponseBody
@RequestMapping("/admin/edu/teacher")
@Api(tags = "讲师管理模块")
@Slf4j
@CrossOrigin
public class AdminTeacherController {
    @Autowired
    TeacherService teacherService;

    //7.批量删除讲师列表
    @ApiOperation(value = "批量删除讲师")
    @DeleteMapping("batchRemove")
    public R batchRemove(@RequestParam("ids") List<String> ids){
        teacherService.removeByIds(ids);
        return R.ok();
    }

    //6、根据id查询讲师
    @GetMapping("get/{id}")
    public R getById(@PathVariable String id){
        Teacher teacher = teacherService.getById(id);
        return R.ok().data("item" , teacher);
    }

    //7、更新讲师
    @ApiOperation(value = "更新讲师")
    @PutMapping("update")
    public R updateTeacher(@RequestBody Teacher teacher){
        //用户名唯一性校验：根据讲师id查询讲师姓名，然后判断如果讲师姓名修改了，再去判断唯一性
        boolean b = teacherService.updateById(teacher);
        if(b){
            return R.ok();
        }
        return R.error().message("更新失败");
    }



    //5、新增讲师
    @ApiOperation(value = "新增讲师")
    @PostMapping("save")
    public R saveTeacher(@RequestBody Teacher teacher){
        boolean flag = teacherService.saveTeacher(teacher);
        if(flag){
            return R.ok();
        }
        return R.error().message("讲师姓名已存在");
    }

    //4、带条件的分页查询
    // get方式的请求报文默认没有请求体，其他方式才有
    @ApiOperation(value = "带条件查询讲师分页显示")
    @GetMapping("list/{pageNum}/{pageSize}")
    public R listPageByCondition(@PathVariable Integer pageNum ,
                                 @PathVariable Integer pageSize,
                                 TeacherQuery teacherQuery){
        Page<Teacher> page = teacherService.listPage(pageNum , pageSize , teacherQuery);

        return R.ok().data("page" , page);
    }
    //3、查询讲师的分页数据
//    @ApiOperation(value = "查询所有讲师分页显示")
//    @GetMapping("list/{pageNum}/{pageSize}")
//    public R listPage(@PathVariable Integer pageNum , @PathVariable Integer pageSize){
//        Page<Teacher> page = new Page<>(pageNum , pageSize);
//        teacherService.page(page);
//        return R.ok().data("page" , page);
//    }
    /**
     * 统一响应类：
     *      状态码：Integer code
     *      状态描述：String msg
     *      是否成功：boolean success
     *      成功的响应应数据：Map<k,v>  data
     * javabean的类型：
     *  1、entity：数据库表对应的bean
     *  2、Form/Query: 前端页面表单收集提交的数据对应的bean
     *  3、VO： view Object  浏览器需要显示的数据对应的bean
     *  4、DTO： data transfer object 微服务之间远程访问时需要公用的类
     *  业务bean： Page类
     *
     *
     */
    //1、查询所有讲师
    @ApiOperation(value = "查询所有讲师")
    @GetMapping("/list")
    public R listAll(){

//        int a = 1/0;
        //error(错误)    warning(警告级别，一般生产环境使用)   info(调试使用)   debug(开发使用，输出接受的参数..)
        // {} 占位符
        log.debug("{}级别日志：{}","debug" , new Date());
        log.info("{}级别日志：{}","info" , new Date());
        log.warn("{}级别日志：{}","warn" , new Date());
        log.error("{}级别日志：{}","error" , new Date());

        //代码正常执行 会返回数据的结果集，如果出现异常一般trycatch 返回异常信息给浏览器(这两种响应状态码都是200)
        List<Teacher> teachers = teacherService.list();
        return R.ok().data("items" , teachers);
    }
    //2、删除指定id的讲师
    @ApiOperation(value = "删除讲师")
    @DeleteMapping("remove/{id}")
    public R deleteTeacher(@ApiParam(value = "讲师id") @PathVariable String id){
        boolean b = teacherService.removeById(id);
        if(b){
            return R.ok();
        }
        return R.error().message("记录不存在");
    }
}
